/**
 * 租户和部门联动  下拉列表结构
 * by sunwanli
 * create 2021-08-26
 */
import React from 'react';
import { connect } from 'dva';
import PropTypes from 'prop-types';
import { Row, Col } from 'antd';
import TenantC from './index';
import DepartmentC from './departmentC';

class TenantDepartmentC extends React.PureComponent {
  // props默认值
  static defaultProps = {
    isSuperMan: true, // 是否为超户
    title: ['租户', '部门'],
    initialValue: undefined,
    placeholder: ['请选择租户', '请选择部门'],
    helper: '',
    tenantOnChange: () => {}, // 租户选择变更事件
    departmentChange: () => {}, // 部门选择变更事件
    onRef: () => {}, // 本组件的引用
    width: '100%',
    multiple: [false, false], // 默认不支持多选
    rules: [undefined, undefined], // 默认无校验规则
    allowClear: true, // 默认可删除
    authority: 'read', // 默认是读权限
    disabled: false, // 默认不禁用
    direction: 'row', // 默认是横向布局
    firstInit: false, // 租户--是否显示默认参数--当设置成true时，默认定位到一个元素
  };

  constructor(props) {
    super(props);

    this.state = {
      tenantId: undefined,
    };
  }
  componentDidMount() {
    // 父组件对本组件的引用
    this.props.onRef(this);
    this.setState({
      isSuperMan: localStorage.getItem('antd-pro-superMan') == 'true',
    });
  }

  // 非初始化状态下更改下拉选项(供父组件调用)
  setSelect = (value) => {
    // 设置租户
    if (this.state.isSuperMan) {
      this.state.TenantC.setSelect(value && value[0]);
    }
    // 设置部门
    setTimeout(() => {
      this.state.DepartmentC.setSelect(value && value[1]);
    }, 0);
  };

  // 切换租户下拉响应事件
  tenantOnChange = (e) => {
    // 清空部门选项
    this.state.DepartmentC.setSelect(undefined);
    if (e) {
      // 设置当前选择的租户
      this.setState({
        tenantId: e.key,
      });
    } else {
      this.setState({
        tenantId: undefined,
      });
    }
    // 对外抛出事件
    this.props.tenantOnChange(e);
  };

  render() {
    const {
      spanCol,
      form,
      title,
      dataIndex,
      initialValue,
      placeholder,
      helper,
      width,
      departmentChange,
      multiple,
      rules,
      formItemLayout,
      allowClear,
      authority,
      disabled,
      direction,
      firstInit,
    } = this.props;

    return (
      <Row style={{ width: width }}>
        {this.state.isSuperMan ? (
          <Col span={direction === 'row' ? (spanCol ? spanCol : 12) : 24}>
            <TenantC
              form={form}
              helper={helper && helper[0]}
              dataIndex={dataIndex && dataIndex[0]}
              title={title && title[0]}
              initialValue={initialValue && initialValue[0]}
              placeholder={placeholder && placeholder[0]}
              onChange={this.tenantOnChange}
              rules={rules[0]}
              onRef={(ref) => this.setState({ TenantC: ref })}
              formItemLayout={formItemLayout}
              allowClear={allowClear}
              disabled={disabled}
              multiple={multiple && multiple[0]}
              firstInit={firstInit}
            />
          </Col>
        ) : (
          ''
        )}
        <Col span={direction === 'row' && this.state.isSuperMan ? (spanCol ? spanCol : 12) : 24}>
          <DepartmentC
            form={form}
            helper={helper && helper[1]}
            dataIndex={dataIndex && dataIndex[1]}
            title={title && title[1]}
            initialValue={initialValue && initialValue[1]}
            placeholder={placeholder && placeholder[1]}
            onChange={(e) => departmentChange(e)}
            rules={rules[1]}
            ralation={localStorage.getItem('antd-pro-superMan') == 'true'} //联动标志位,超户为true，普通用户不需要联动
            tenantId={this.state.tenantId}
            multiple={multiple && multiple[1]}
            onRef={(ref) => this.setState({ DepartmentC: ref })}
            formItemLayout={formItemLayout}
            allowClear={allowClear}
            authority={authority}
            disabled={disabled}
          />
        </Col>
      </Row>
    );
  }
}

// props类型
TenantDepartmentC.propsTypes = {
  form: PropTypes.object, // form对象
  title: PropTypes.array, // 显示名称
  dataIndex: PropTypes.array, // Form识别的Item ID
  initialValue: PropTypes.array, // 初始默认值([租户初始化值，部门初始化值])
  placeholder: PropTypes.array, // 占位符
  helper: PropTypes.array, // 提示帮助信息
  onRef: PropTypes.func, // 本组件的引用（可用来父组件调用内部方法）
  multiple: PropTypes.array, // 是否支持多选
  rules: PropTypes.array, // 校验规则
  formItemLayout: PropTypes.object, // 设置表单布局
  allowClear: PropTypes.bool, // 设置是否可删除
  authority: PropTypes.oneOf(['read', 'write']), // 设置权限类型
  disabled: PropTypes.bool, // 是否禁用
  direction: PropTypes.string, // 布局（row-横向 column-纵向）
  firstInit: PropTypes.bool, // 租户--是否显示默认参数--当设置成true时，默认定位到一个元素
};

export default connect(({ tenantM, loading }) => ({ tenantM, loading }))(TenantDepartmentC);
